/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package JPAControllers;

import JPAControllers.exceptions.IllegalOrphanException;
import JPAControllers.exceptions.NonexistentEntityException;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import Persistencia.Tipousuario;
import Persistencia.Fisioterapeuta;
import java.util.ArrayList;
import java.util.List;
import Persistencia.Sesion;
import Persistencia.Login;
import Persistencia.Comentariovideo;
import Persistencia.Comentario;

/**
 *
 * @author veinti
 */
public class FisioterapeutaJpaController {

    public FisioterapeutaJpaController() {
        emf = Persistence.createEntityManagerFactory("fisiosoftJDVPU");
    }
    private EntityManagerFactory emf = null;

    public EntityManager getEntityManager() {
        return emf.createEntityManager();
    }

    public void create(Fisioterapeuta fisioterapeuta) {
        if (fisioterapeuta.getFisioterapeutaList() == null) {
            fisioterapeuta.setFisioterapeutaList(new ArrayList<Fisioterapeuta>());
        }
        if (fisioterapeuta.getSesionList() == null) {
            fisioterapeuta.setSesionList(new ArrayList<Sesion>());
        }
        if (fisioterapeuta.getLoginList() == null) {
            fisioterapeuta.setLoginList(new ArrayList<Login>());
        }
        if (fisioterapeuta.getComentariovideoList() == null) {
            fisioterapeuta.setComentariovideoList(new ArrayList<Comentariovideo>());
        }
        if (fisioterapeuta.getComentarioList() == null) {
            fisioterapeuta.setComentarioList(new ArrayList<Comentario>());
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Tipousuario tipousuario = fisioterapeuta.getTipousuario();
            if (tipousuario != null) {
                tipousuario = em.getReference(tipousuario.getClass(), tipousuario.getIdTipo());
                fisioterapeuta.setTipousuario(tipousuario);
            }
            Fisioterapeuta fisioterapeutaRel = fisioterapeuta.getFisioterapeuta();
            if (fisioterapeutaRel != null) {
                fisioterapeutaRel = em.getReference(fisioterapeuta.getClass(), fisioterapeuta.getIdFisioterapeuta());
                fisioterapeuta.setFisioterapeuta(fisioterapeutaRel);
            }
            List<Fisioterapeuta> attachedFisioterapeutaList = new ArrayList<Fisioterapeuta>();
            for (Fisioterapeuta fisioterapeutaListFisioterapeutaToAttach : fisioterapeuta.getFisioterapeutaList()) {
                fisioterapeutaListFisioterapeutaToAttach = em.getReference(fisioterapeutaListFisioterapeutaToAttach.getClass(), fisioterapeutaListFisioterapeutaToAttach.getIdFisioterapeuta());
                attachedFisioterapeutaList.add(fisioterapeutaListFisioterapeutaToAttach);
            }
            fisioterapeuta.setFisioterapeutaList(attachedFisioterapeutaList);
            List<Sesion> attachedSesionList = new ArrayList<Sesion>();
            for (Sesion sesionListSesionToAttach : fisioterapeuta.getSesionList()) {
                sesionListSesionToAttach = em.getReference(sesionListSesionToAttach.getClass(), sesionListSesionToAttach.getIdSesion());
                attachedSesionList.add(sesionListSesionToAttach);
            }
            fisioterapeuta.setSesionList(attachedSesionList);
            List<Login> attachedLoginList = new ArrayList<Login>();
            for (Login loginListLoginToAttach : fisioterapeuta.getLoginList()) {
                loginListLoginToAttach = em.getReference(loginListLoginToAttach.getClass(), loginListLoginToAttach.getLogin());
                attachedLoginList.add(loginListLoginToAttach);
            }
            fisioterapeuta.setLoginList(attachedLoginList);
            List<Comentariovideo> attachedComentariovideoList = new ArrayList<Comentariovideo>();
            for (Comentariovideo comentariovideoListComentariovideoToAttach : fisioterapeuta.getComentariovideoList()) {
                comentariovideoListComentariovideoToAttach = em.getReference(comentariovideoListComentariovideoToAttach.getClass(), comentariovideoListComentariovideoToAttach.getIdComentariovideo());
                attachedComentariovideoList.add(comentariovideoListComentariovideoToAttach);
            }
            fisioterapeuta.setComentariovideoList(attachedComentariovideoList);
            List<Comentario> attachedComentarioList = new ArrayList<Comentario>();
            for (Comentario comentarioListComentarioToAttach : fisioterapeuta.getComentarioList()) {
                comentarioListComentarioToAttach = em.getReference(comentarioListComentarioToAttach.getClass(), comentarioListComentarioToAttach.getIdComentario());
                attachedComentarioList.add(comentarioListComentarioToAttach);
            }
            fisioterapeuta.setComentarioList(attachedComentarioList);
            em.persist(fisioterapeuta);
            if (tipousuario != null) {
                tipousuario.getFisioterapeutaList().add(fisioterapeuta);
                tipousuario = em.merge(tipousuario);
            }
            if (fisioterapeutaRel != null) {
                fisioterapeutaRel.getFisioterapeutaList().add(fisioterapeuta);
                fisioterapeutaRel = em.merge(fisioterapeutaRel);
            }
            for (Fisioterapeuta fisioterapeutaListFisioterapeuta : fisioterapeuta.getFisioterapeutaList()) {
                Fisioterapeuta oldFisioterapeutaOfFisioterapeutaListFisioterapeuta = fisioterapeutaListFisioterapeuta.getFisioterapeuta();
                fisioterapeutaListFisioterapeuta.setFisioterapeuta(fisioterapeuta);
                fisioterapeutaListFisioterapeuta = em.merge(fisioterapeutaListFisioterapeuta);
                if (oldFisioterapeutaOfFisioterapeutaListFisioterapeuta != null) {
                    oldFisioterapeutaOfFisioterapeutaListFisioterapeuta.getFisioterapeutaList().remove(fisioterapeutaListFisioterapeuta);
                    oldFisioterapeutaOfFisioterapeutaListFisioterapeuta = em.merge(oldFisioterapeutaOfFisioterapeutaListFisioterapeuta);
                }
            }
            for (Sesion sesionListSesion : fisioterapeuta.getSesionList()) {
                Fisioterapeuta oldFisioterapeutaOfSesionListSesion = sesionListSesion.getFisioterapeuta();
                sesionListSesion.setFisioterapeuta(fisioterapeuta);
                sesionListSesion = em.merge(sesionListSesion);
                if (oldFisioterapeutaOfSesionListSesion != null) {
                    oldFisioterapeutaOfSesionListSesion.getSesionList().remove(sesionListSesion);
                    oldFisioterapeutaOfSesionListSesion = em.merge(oldFisioterapeutaOfSesionListSesion);
                }
            }
            for (Login loginListLogin : fisioterapeuta.getLoginList()) {
                Fisioterapeuta oldFisioterapeutaOfLoginListLogin = loginListLogin.getFisioterapeuta();
                loginListLogin.setFisioterapeuta(fisioterapeuta);
                loginListLogin = em.merge(loginListLogin);
                if (oldFisioterapeutaOfLoginListLogin != null) {
                    oldFisioterapeutaOfLoginListLogin.getLoginList().remove(loginListLogin);
                    oldFisioterapeutaOfLoginListLogin = em.merge(oldFisioterapeutaOfLoginListLogin);
                }
            }
            for (Comentariovideo comentariovideoListComentariovideo : fisioterapeuta.getComentariovideoList()) {
                Fisioterapeuta oldFisioterapeutaOfComentariovideoListComentariovideo = comentariovideoListComentariovideo.getFisioterapeuta();
                comentariovideoListComentariovideo.setFisioterapeuta(fisioterapeuta);
                comentariovideoListComentariovideo = em.merge(comentariovideoListComentariovideo);
                if (oldFisioterapeutaOfComentariovideoListComentariovideo != null) {
                    oldFisioterapeutaOfComentariovideoListComentariovideo.getComentariovideoList().remove(comentariovideoListComentariovideo);
                    oldFisioterapeutaOfComentariovideoListComentariovideo = em.merge(oldFisioterapeutaOfComentariovideoListComentariovideo);
                }
            }
            for (Comentario comentarioListComentario : fisioterapeuta.getComentarioList()) {
                Fisioterapeuta oldFisioterapeutaOfComentarioListComentario = comentarioListComentario.getFisioterapeuta();
                comentarioListComentario.setFisioterapeuta(fisioterapeuta);
                comentarioListComentario = em.merge(comentarioListComentario);
                if (oldFisioterapeutaOfComentarioListComentario != null) {
                    oldFisioterapeutaOfComentarioListComentario.getComentarioList().remove(comentarioListComentario);
                    oldFisioterapeutaOfComentarioListComentario = em.merge(oldFisioterapeutaOfComentarioListComentario);
                }
            }
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(Fisioterapeuta fisioterapeuta) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Fisioterapeuta persistentFisioterapeuta = em.find(Fisioterapeuta.class, fisioterapeuta.getIdFisioterapeuta());
            Tipousuario tipousuarioOld = persistentFisioterapeuta.getTipousuario();
            Tipousuario tipousuarioNew = fisioterapeuta.getTipousuario();
            Fisioterapeuta fisioterapeutaRelOld = persistentFisioterapeuta.getFisioterapeuta();
            Fisioterapeuta fisioterapeutaRelNew = fisioterapeuta.getFisioterapeuta();
            List<Fisioterapeuta> fisioterapeutaListOld = persistentFisioterapeuta.getFisioterapeutaList();
            List<Fisioterapeuta> fisioterapeutaListNew = fisioterapeuta.getFisioterapeutaList();
            List<Sesion> sesionListOld = persistentFisioterapeuta.getSesionList();
            List<Sesion> sesionListNew = fisioterapeuta.getSesionList();
            List<Login> loginListOld = persistentFisioterapeuta.getLoginList();
            List<Login> loginListNew = fisioterapeuta.getLoginList();
            List<Comentariovideo> comentariovideoListOld = persistentFisioterapeuta.getComentariovideoList();
            List<Comentariovideo> comentariovideoListNew = fisioterapeuta.getComentariovideoList();
            List<Comentario> comentarioListOld = persistentFisioterapeuta.getComentarioList();
            List<Comentario> comentarioListNew = fisioterapeuta.getComentarioList();
            List<String> illegalOrphanMessages = null;
            for (Sesion sesionListOldSesion : sesionListOld) {
                if (!sesionListNew.contains(sesionListOldSesion)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Sesion " + sesionListOldSesion + " since its fisioterapeuta field is not nullable.");
                }
            }
            for (Comentariovideo comentariovideoListOldComentariovideo : comentariovideoListOld) {
                if (!comentariovideoListNew.contains(comentariovideoListOldComentariovideo)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Comentariovideo " + comentariovideoListOldComentariovideo + " since its fisioterapeuta field is not nullable.");
                }
            }
            for (Comentario comentarioListOldComentario : comentarioListOld) {
                if (!comentarioListNew.contains(comentarioListOldComentario)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain Comentario " + comentarioListOldComentario + " since its fisioterapeuta field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (tipousuarioNew != null) {
                tipousuarioNew = em.getReference(tipousuarioNew.getClass(), tipousuarioNew.getIdTipo());
                fisioterapeuta.setTipousuario(tipousuarioNew);
            }
            if (fisioterapeutaRelNew != null) {
                fisioterapeutaRelNew = em.getReference(fisioterapeutaRelNew.getClass(), fisioterapeutaRelNew.getIdFisioterapeuta());
                fisioterapeuta.setFisioterapeuta(fisioterapeutaRelNew);
            }
            List<Fisioterapeuta> attachedFisioterapeutaListNew = new ArrayList<Fisioterapeuta>();
            for (Fisioterapeuta fisioterapeutaListNewFisioterapeutaToAttach : fisioterapeutaListNew) {
                fisioterapeutaListNewFisioterapeutaToAttach = em.getReference(fisioterapeutaListNewFisioterapeutaToAttach.getClass(), fisioterapeutaListNewFisioterapeutaToAttach.getIdFisioterapeuta());
                attachedFisioterapeutaListNew.add(fisioterapeutaListNewFisioterapeutaToAttach);
            }
            fisioterapeutaListNew = attachedFisioterapeutaListNew;
            fisioterapeuta.setFisioterapeutaList(fisioterapeutaListNew);
            List<Sesion> attachedSesionListNew = new ArrayList<Sesion>();
            for (Sesion sesionListNewSesionToAttach : sesionListNew) {
                sesionListNewSesionToAttach = em.getReference(sesionListNewSesionToAttach.getClass(), sesionListNewSesionToAttach.getIdSesion());
                attachedSesionListNew.add(sesionListNewSesionToAttach);
            }
            sesionListNew = attachedSesionListNew;
            fisioterapeuta.setSesionList(sesionListNew);
            List<Login> attachedLoginListNew = new ArrayList<Login>();
            for (Login loginListNewLoginToAttach : loginListNew) {
                loginListNewLoginToAttach = em.getReference(loginListNewLoginToAttach.getClass(), loginListNewLoginToAttach.getLogin());
                attachedLoginListNew.add(loginListNewLoginToAttach);
            }
            loginListNew = attachedLoginListNew;
            fisioterapeuta.setLoginList(loginListNew);
            List<Comentariovideo> attachedComentariovideoListNew = new ArrayList<Comentariovideo>();
            for (Comentariovideo comentariovideoListNewComentariovideoToAttach : comentariovideoListNew) {
                comentariovideoListNewComentariovideoToAttach = em.getReference(comentariovideoListNewComentariovideoToAttach.getClass(), comentariovideoListNewComentariovideoToAttach.getIdComentariovideo());
                attachedComentariovideoListNew.add(comentariovideoListNewComentariovideoToAttach);
            }
            comentariovideoListNew = attachedComentariovideoListNew;
            fisioterapeuta.setComentariovideoList(comentariovideoListNew);
            List<Comentario> attachedComentarioListNew = new ArrayList<Comentario>();
            for (Comentario comentarioListNewComentarioToAttach : comentarioListNew) {
                comentarioListNewComentarioToAttach = em.getReference(comentarioListNewComentarioToAttach.getClass(), comentarioListNewComentarioToAttach.getIdComentario());
                attachedComentarioListNew.add(comentarioListNewComentarioToAttach);
            }
            comentarioListNew = attachedComentarioListNew;
            fisioterapeuta.setComentarioList(comentarioListNew);
            fisioterapeuta = em.merge(fisioterapeuta);
            if (tipousuarioOld != null && !tipousuarioOld.equals(tipousuarioNew)) {
                tipousuarioOld.getFisioterapeutaList().remove(fisioterapeuta);
                tipousuarioOld = em.merge(tipousuarioOld);
            }
            if (tipousuarioNew != null && !tipousuarioNew.equals(tipousuarioOld)) {
                tipousuarioNew.getFisioterapeutaList().add(fisioterapeuta);
                tipousuarioNew = em.merge(tipousuarioNew);
            }
            if (fisioterapeutaRelOld != null && !fisioterapeutaRelOld.equals(fisioterapeutaRelNew)) {
                fisioterapeutaRelOld.getFisioterapeutaList().remove(fisioterapeuta);
                fisioterapeutaRelOld = em.merge(fisioterapeutaRelOld);
            }
            if (fisioterapeutaRelNew != null && !fisioterapeutaRelNew.equals(fisioterapeutaRelOld)) {
                fisioterapeutaRelNew.getFisioterapeutaList().add(fisioterapeuta);
                fisioterapeutaRelNew = em.merge(fisioterapeutaRelNew);
            }
            for (Fisioterapeuta fisioterapeutaListOldFisioterapeuta : fisioterapeutaListOld) {
                if (!fisioterapeutaListNew.contains(fisioterapeutaListOldFisioterapeuta)) {
                    fisioterapeutaListOldFisioterapeuta.setFisioterapeuta(null);
                    fisioterapeutaListOldFisioterapeuta = em.merge(fisioterapeutaListOldFisioterapeuta);
                }
            }
            for (Fisioterapeuta fisioterapeutaListNewFisioterapeuta : fisioterapeutaListNew) {
                if (!fisioterapeutaListOld.contains(fisioterapeutaListNewFisioterapeuta)) {
                    Fisioterapeuta oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta = fisioterapeutaListNewFisioterapeuta.getFisioterapeuta();
                    fisioterapeutaListNewFisioterapeuta.setFisioterapeuta(fisioterapeuta);
                    fisioterapeutaListNewFisioterapeuta = em.merge(fisioterapeutaListNewFisioterapeuta);
                    if (oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta != null && !oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta.equals(fisioterapeuta)) {
                        oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta.getFisioterapeutaList().remove(fisioterapeutaListNewFisioterapeuta);
                        oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta = em.merge(oldFisioterapeutaOfFisioterapeutaListNewFisioterapeuta);
                    }
                }
            }
            for (Sesion sesionListNewSesion : sesionListNew) {
                if (!sesionListOld.contains(sesionListNewSesion)) {
                    Fisioterapeuta oldFisioterapeutaOfSesionListNewSesion = sesionListNewSesion.getFisioterapeuta();
                    sesionListNewSesion.setFisioterapeuta(fisioterapeuta);
                    sesionListNewSesion = em.merge(sesionListNewSesion);
                    if (oldFisioterapeutaOfSesionListNewSesion != null && !oldFisioterapeutaOfSesionListNewSesion.equals(fisioterapeuta)) {
                        oldFisioterapeutaOfSesionListNewSesion.getSesionList().remove(sesionListNewSesion);
                        oldFisioterapeutaOfSesionListNewSesion = em.merge(oldFisioterapeutaOfSesionListNewSesion);
                    }
                }
            }
            for (Login loginListOldLogin : loginListOld) {
                if (!loginListNew.contains(loginListOldLogin)) {
                    loginListOldLogin.setFisioterapeuta(null);
                    loginListOldLogin = em.merge(loginListOldLogin);
                }
            }
            for (Login loginListNewLogin : loginListNew) {
                if (!loginListOld.contains(loginListNewLogin)) {
                    Fisioterapeuta oldFisioterapeutaOfLoginListNewLogin = loginListNewLogin.getFisioterapeuta();
                    loginListNewLogin.setFisioterapeuta(fisioterapeuta);
                    loginListNewLogin = em.merge(loginListNewLogin);
                    if (oldFisioterapeutaOfLoginListNewLogin != null && !oldFisioterapeutaOfLoginListNewLogin.equals(fisioterapeuta)) {
                        oldFisioterapeutaOfLoginListNewLogin.getLoginList().remove(loginListNewLogin);
                        oldFisioterapeutaOfLoginListNewLogin = em.merge(oldFisioterapeutaOfLoginListNewLogin);
                    }
                }
            }
            for (Comentariovideo comentariovideoListNewComentariovideo : comentariovideoListNew) {
                if (!comentariovideoListOld.contains(comentariovideoListNewComentariovideo)) {
                    Fisioterapeuta oldFisioterapeutaOfComentariovideoListNewComentariovideo = comentariovideoListNewComentariovideo.getFisioterapeuta();
                    comentariovideoListNewComentariovideo.setFisioterapeuta(fisioterapeuta);
                    comentariovideoListNewComentariovideo = em.merge(comentariovideoListNewComentariovideo);
                    if (oldFisioterapeutaOfComentariovideoListNewComentariovideo != null && !oldFisioterapeutaOfComentariovideoListNewComentariovideo.equals(fisioterapeuta)) {
                        oldFisioterapeutaOfComentariovideoListNewComentariovideo.getComentariovideoList().remove(comentariovideoListNewComentariovideo);
                        oldFisioterapeutaOfComentariovideoListNewComentariovideo = em.merge(oldFisioterapeutaOfComentariovideoListNewComentariovideo);
                    }
                }
            }
            for (Comentario comentarioListNewComentario : comentarioListNew) {
                if (!comentarioListOld.contains(comentarioListNewComentario)) {
                    Fisioterapeuta oldFisioterapeutaOfComentarioListNewComentario = comentarioListNewComentario.getFisioterapeuta();
                    comentarioListNewComentario.setFisioterapeuta(fisioterapeuta);
                    comentarioListNewComentario = em.merge(comentarioListNewComentario);
                    if (oldFisioterapeutaOfComentarioListNewComentario != null && !oldFisioterapeutaOfComentarioListNewComentario.equals(fisioterapeuta)) {
                        oldFisioterapeutaOfComentarioListNewComentario.getComentarioList().remove(comentarioListNewComentario);
                        oldFisioterapeutaOfComentarioListNewComentario = em.merge(oldFisioterapeutaOfComentarioListNewComentario);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = fisioterapeuta.getIdFisioterapeuta();
                if (findFisioterapeuta(id) == null) {
                    throw new NonexistentEntityException("The fisioterapeuta with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            Fisioterapeuta fisioterapeuta;
            try {
                fisioterapeuta = em.getReference(Fisioterapeuta.class, id);
                fisioterapeuta.getIdFisioterapeuta();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The fisioterapeuta with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            List<Sesion> sesionListOrphanCheck = fisioterapeuta.getSesionList();
            for (Sesion sesionListOrphanCheckSesion : sesionListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Fisioterapeuta (" + fisioterapeuta + ") cannot be destroyed since the Sesion " + sesionListOrphanCheckSesion + " in its sesionList field has a non-nullable fisioterapeuta field.");
            }
            List<Comentariovideo> comentariovideoListOrphanCheck = fisioterapeuta.getComentariovideoList();
            for (Comentariovideo comentariovideoListOrphanCheckComentariovideo : comentariovideoListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Fisioterapeuta (" + fisioterapeuta + ") cannot be destroyed since the Comentariovideo " + comentariovideoListOrphanCheckComentariovideo + " in its comentariovideoList field has a non-nullable fisioterapeuta field.");
            }
            List<Comentario> comentarioListOrphanCheck = fisioterapeuta.getComentarioList();
            for (Comentario comentarioListOrphanCheckComentario : comentarioListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This Fisioterapeuta (" + fisioterapeuta + ") cannot be destroyed since the Comentario " + comentarioListOrphanCheckComentario + " in its comentarioList field has a non-nullable fisioterapeuta field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            Tipousuario tipousuario = fisioterapeuta.getTipousuario();
            if (tipousuario != null) {
                tipousuario.getFisioterapeutaList().remove(fisioterapeuta);
                tipousuario = em.merge(tipousuario);
            }
            Fisioterapeuta fisioterapeutaRel = fisioterapeuta.getFisioterapeuta();
            if (fisioterapeutaRel != null) {
                fisioterapeutaRel.getFisioterapeutaList().remove(fisioterapeuta);
                fisioterapeutaRel = em.merge(fisioterapeutaRel);
            }
            List<Fisioterapeuta> fisioterapeutaList = fisioterapeuta.getFisioterapeutaList();
            for (Fisioterapeuta fisioterapeutaListFisioterapeuta : fisioterapeutaList) {
                fisioterapeutaListFisioterapeuta.setFisioterapeuta(null);
                fisioterapeutaListFisioterapeuta = em.merge(fisioterapeutaListFisioterapeuta);
            }
            List<Login> loginList = fisioterapeuta.getLoginList();
            for (Login loginListLogin : loginList) {
                loginListLogin.setFisioterapeuta(null);
                loginListLogin = em.merge(loginListLogin);
            }
            em.remove(fisioterapeuta);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<Fisioterapeuta> findFisioterapeutaEntities() {
        return findFisioterapeutaEntities(true, -1, -1);
    }

    public List<Fisioterapeuta> findFisioterapeutaEntities(int maxResults, int firstResult) {
        return findFisioterapeutaEntities(false, maxResults, firstResult);
    }

    private List<Fisioterapeuta> findFisioterapeutaEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(Fisioterapeuta.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public Fisioterapeuta findFisioterapeuta(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(Fisioterapeuta.class, id);
        } finally {
            em.close();
        }
    }

    public int getFisioterapeutaCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<Fisioterapeuta> rt = cq.from(Fisioterapeuta.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }

}
